<?php

/* 
 * 队列缓存
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

class Queue
{
    private $queue = null;
    private $isOnline = false;
    private $_keyFlag = '';//设置标记，区分开测试与正常服务器存储

    public function __construct()
    {
        if (in_array(ENV, array(ENV_ONLINE_TEST, ENV_ONLINE_PRODUCT))) {
            $this->isOnline = true;
            //设置标记，区分开测试与正常服务器存储
            if (ENV == ENV_ONLINE_TEST) {
                $this->_keyFlag = '_test';
            }
            $this->queue = new Memcache();
            $this->queue->connect(C('queue.host'), C('queue.port'));
        }
    }


    /**
     * add  添加一个新key,但是如果 key已经在服务端存在，此操作会失败。
     * @param string $key KEY名称
     * @param string $value 值----可以是数组，对象，单值
     * @return boolean 是否成功
     */
    public function set($key, $value)
    {
        if (!$this->isOnline) return false;
        $key .= $this->_keyFlag;
        $bool = $this->queue->set($key, $value);
        return $bool;
    }

    /**
     * 添加数值　
     * @param $key
     * @param $value
     * @author: wzl
     * @date: 2017
     * @return bool
     */
    public function push($key, $value)
    {
        return $this->set($key, $value);
    }

    /**
     * 获取队列数据
     * @param type $key
     * @return type
     */
    public function get($key)
    {
        if (!$this->isOnline) return false;
        $key .= $this->_keyFlag;
        return $this->queue->get($key);
    }

    /**
     * 删除某个key
     * @param $key
     * @author: wzl
     * @date: 2017
     * @return bool
     */
    public function forget($key)
    {
        if (!$this->isOnline) return false;
        $key .= $this->_keyFlag;
        $retMes = $this->queue->delete($key);
        return $retMes;
    }

    /**
     *  清空所有缓存内容，不是真的删除缓存的内容，只是使所有变量的缓存过期，使内存中的内容被重写
     */
    public function flush()
    {
        if (!$this->isOnline) return false;
        return $this->queue->flush();
    }
}

